package pl.polsl.mmm.projectcomm.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import static android.opengl.GLES20.GL_LINEAR;
import static android.opengl.GLES20.GL_LINEAR_MIPMAP_LINEAR;
import static android.opengl.GLES20.GL_NEAREST;
import static android.opengl.GLES20.GL_TEXTURE_2D;
import static android.opengl.GLES20.GL_TEXTURE_MAG_FILTER;
import static android.opengl.GLES20.GL_TEXTURE_MIN_FILTER;
import static android.opengl.GLES20.glBindTexture;
import static android.opengl.GLES20.glDeleteTextures;
import static android.opengl.GLES20.glGenTextures;
import static android.opengl.GLES20.glGenerateMipmap;
import static android.opengl.GLES20.glTexParameteri;
import static android.opengl.GLUtils.texImage2D;

public class BackgroundTextureHelper {
	private static final String TAG = "BackgroundTextureHelper";
	
	public static int loadTexture (Context context, int resourceId) {
		final int[] textureObjectIds = new int[1];
		//stworzenie obiektu tekstury w api 
		glGenTextures(1, textureObjectIds, 0);
		
		if (textureObjectIds[0] == 0) {
			if (LoggerConfig.ON) {
				Log.w(TAG, "Could not generate a new OpenGL texture object.");
			}
			return 0;
		}
		//stworzenie obiektu dekodera to rozczytania pliku jpg/png. obiekt options dla zmiany opcji skalowania
		final BitmapFactory.Options options = new BitmapFactory.Options();
		options.inScaled = false;

		//zdekodowanie pliku do formatu bitmapy rozczytywalnej dla api
		final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options);
		
		if (bitmap == null) {
			if (LoggerConfig.ON) {
				Log.w(TAG, " Resource ID " + resourceId + " could not be decoded.");
			}
			glDeleteTextures(1,textureObjectIds, 0);
			return 0;
		}
		//przypisanie wczytanej tekstury z ID utworzonym przy glGenTextures
		glBindTexture(GL_TEXTURE_2D, textureObjectIds[0]);
		//ustawienie parametr�w powiekszania , zmniejszania tekstury 
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
		//wpisanie tekstury z parametrami do bufora w api
		texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
		//ustawienie flagi dla GC, obiekt pomocniczy bitmap nie jest nam juz potrzebny
		bitmap.recycle();
		//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		//dobra praktyka: odbindowanie tekstury , zebysmy kolejnymi wywolaniami jej nie zmianiali.
		//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		glBindTexture(GL_TEXTURE_2D,0);
        return textureObjectIds[0];
	}
}
